<?php
/**
 * Innehåller funktioner för att veta om någon är inloggad, för att logga ut, för att logga in.
 * I denna laboration får endast klasser i Model kommunicera direkt med en databas eller filsystem
 */
class LoginHandler {
	//private variable avoids "strängberoende" as we say in Sweden
	private $loggedIn = 'loggedIn';
	private $memberDAL;
	
	public function __construct ($memberDAL){
		$this->memberDAL = $memberDAL;
	}
	
	//Are we logged in? return true/false
	public function IsLoggedIn() {
		//If session isn't set return false else true
		if (isset($_SESSION[$this -> loggedIn])) {
			return true;
		}
		return false;
	}

	//Logs the user on if correct username && password sets a session if true
	public function DoLogin($name, $password) {
		if ($this->memberDAL->ConfirmUser($name, $password)) {
			$_SESSION[$this -> loggedIn] = true;
			return true;
		} else {
			return false;
		}
	}

	//Stops the session
	public function DoLogout() {
		unset($_SESSION[$this -> loggedIn]);
	}

	public function TestLoginHandler() {
		
		$text = "";
		
		$text = "<p>Tester av Loginhandler</p>";
		
		//Säkerhetsställer att vi är utloggade
		$this -> DoLogout();

		//Testar om vi är inloggade
		if ($this -> IsLoggedIn()) {
			$text .= "<p>FEL Du är inloggad (IsLoggedIn)</p>";
		}

		//Testar att logga in med fel uppgifter
		if ($this -> DoLogin("FELANV", "FELLÖS")) {
			$text .= "<p>FEL du kan logga in med fel anv/lös (IsLoggedIn)</p>";
		}

		//Testar att logga in med rätt uppgifter
		if (!$this -> DoLogin("elin", "elin")) {
			$text .= "<p>FEL du kan inte logga in med rätt anv/lös (IsLoggedIn)</p>";
		}

		//Testar om vi är inloggade
		if (!$this -> IsLoggedIn()) {
			$text .= "<p>FEL Du är inte inloggad du borde vara det (IsLoggedIn)</p>";
		}

		//loggar ut
		$this -> DoLogout();

		if ($this -> IsLoggedIn()) {
			$text .= "<p>FEL Du är inloggad (IsLoggedIn)</p>";
		}

		
		
		return $text;
	}

}

//Don't have ? > if you accidentally have a space or tab after the end sign it will print on clientside. 
